package com.cskaoyan._11polymorphic._4cast;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/10 15:57
 **/
/*
强转失败会导致程序抛出异常：`ClassCastException`，
导致程序终止执行。正是由于强转的条件苛刻，
而且失败后果很严重，所以Java当中提供了检测手段，来保障强转的安全性

语法:
    引用 instanceof 类名
    结果:
        true : 表示该引用指向的对象，是后面类名的一个对象或者子类对象。
        false
        如果引用是null 结果也是false
 */
public class Demo {
    public static void main(String[] args) {
        GrandFather gf =  new Son();
        //Father father = (Father) gf;
        //Son son = (Son) gf;
        // GrandSon grandSon = (GrandSon) gf;
        // 强转后的引用类型必须能够真正的指向该对象,
        // 即强转后的引用的类型必须是该对象的类型或者其父类型

        System.out.println(gf instanceof GrandFather);// true
        System.out.println(gf instanceof Father);// true
        System.out.println(gf instanceof Son);// true
        System.out.println(gf instanceof GrandSon);// false
        gf = null;
        System.out.println(gf instanceof Father);// false

    }
}

class GrandFather{

}
class Father extends GrandFather{

}
class Son extends Father{

}
class GrandSon extends Son{

}